<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <style>
        section, article {
            font-size: 24px;
        }

        table tr th,td {
            box-shadow: 0 0 1px 0;
            padding: 5px 10px;
        }
    </style>
</head>
<body>
<section>
    <h2>http常见请求方法</h2>
    <ul>
        <li>get</li>
        <li>post</li>
        <li>put</li>
        <li>delete</li>
    </ul>
    <h2>http不常见请求方法</h2>
    <ul>
        <li>head 和get类似，只不过没有响应内容</li>
        <li>connect http1.1协议中预留给能够将连接改为管道方式的代理服务器</li>
        <li>options 允许客户端查看服务器的性能（预检查请求）</li>
        <li>trace 回显服务器的请求，主要用于测试</li>
    </ul>
</section>
<section>
    <h2>http提交数据常见的方式</h2>
    <ul>
        <li>Content-Type: text/plain 提交文本数据，客户端默认的数据格式</li>
        <li>Content-Type: application/json 如：{user:1234,pwd:1234}，需要序列化，js可以使用JSON.stringify来序列化, 以nodejs为服务的话，需要bodyParser插件解析接受的参数</li>
        <li>Content-Type: application/x-www-form-urlencoded 如：user=1234&pwd=1234</li>
        <li>Content-Type: multipart/form-data 提交视频或文件，以nodejs为服务的话，需要connect-multiparty插件解析</li>
    </ul>
</section>
<section>
    <h2>http简单请求的条件</h2>
    <ul>
        <li>请求方法：get 或 head 或 post</li>
        <li>Content-Type：text/plain、multipart/form-data、application/x-www-form-urlencoded</li>
    </ul>
</section>
<section>
    <h2>http简单请求和http非简单请求(不满足简单请求的就是非简单请求)</h2>
    <ul>
        <li>非简单请求会比简单请求多一个过程options，也就是先进行options请求，在进行本次的请求</li>
    </ul>
</section>
<section>
    <h2>http跨域</h2>
    <ul>
        <li>跨域是浏览器对js实施的安全限制，只要域名或端口号或协议不同，都属于跨域；</li>
        <li>
            跨域 简单请求：浏览器发现简单请求，就直接在request Header增加Origin字段；<br>
            如果response Header中没有允许这个Origin，XMLHttpRequest的onerror会捕获次错误。这种错误无法通过状态码识别，因为http状态是200。
        </li>
        <li>跨域 非简单请求 </li>
    </ul>
</section>
<article>
    <h2>http中cookie、session、token</h2>
    <ul>
        <li>无连接：请求时建连接、请求完释放连接。（用户量大，所有用户都保持连接，服务器压力大）</li>
        <li>keep-alive：保持一段时间的连接。（页面复杂，每次重新连接，效率显得较低）</li>
        <li>Connection: keep-alive, Keep-Alive: timeout=50, max=1024,timeout 代表保持50秒， max代表这个连接最多有1024个请求，每次请求后max=max-1，直到为0就断开连接。</li>
        <li>Connection: close,断开连接，应该是服务器发送FIN过来</li>
        <li>无状态：每次请求都是独立的。（无法记住上一次请求的状态，那岂不是每次请求，服务器都要验证是否登录了）</li>
        <li>cookie和session。（登录之后，服务器验证成功后生成一个编码，返回给浏览器，并用cookie保存，同时服务器用session保存这个编码）</li>
        <li>jwt(json web token) 适用于前后端分离，服务端返回给客户端，且客户端自己保存到cookie或localStorage</li>
    </ul>
</article>
<section>
    <h4>cookie</h4>
    <ul>
        <li>单点登录，用户只需要登录一次就可以访问互相信任的系统；</li>
        <li>单一登录，单账号单ip，后面挤掉前面的登录；</li>
        <li>cookie 由domain+path决定，子域名可以访问父域名的cookie，不能访问兄弟间的cookie；</li>
        <li>cookie domain+path一样，端口号不一样是可以访问cookie的；</li>
        <li>cookie 组成部分name+value+path+expire+domain+secure(1允许https请求，0允许https或http请求)</li>
        <li>cookie 设置cookie，'token=0;path=/;domain=www.baidu.com;expires=new Date(0).toUTCString()'</li>
        <li>
            cookie xhr中withCredentials的作用，可以理解为请求跨域时是否在请求中携带cookie；<br>
            如果是同域，withCredentials = ture 或 false，效果都是一样，浏览器都会携带cookie；<br>
            如果是跨域，withCredentials = true，不能为false，浏览器会携带cookie；同时后端需配置响应头res.setHeader('Access-Control-Allow-Origin', origin)，这里不能是'*'
        </li>
    </ul>
</section>
<article>
    <h2>请求头参数</h2>
    <ul>
        <li>accept:application/json,text/plain,*/*(客户端希望服务器返回的数据类型(MIME))</li>
        <li>content-Type:text/plain;charset=UTF-8(发送给服务器的数据类型(MIME), ,get请求没有此属性)</li>
        <li>accept-Encoding:gzip,deflate,sdch(客户端能够解码的方式)</li>
        <li>accept-Language:zh-CN;q=0.8;(客户端可接受的语言)</li>
        <li>Origin:http://localhost:63342(如果是跨域请求，浏览器会自动添加这个属性)</li>
        <li>Access-Control-Request-Method: PUT(如果是跨域非简单请求，浏览器会自动添加这个属性)</li>
        <li>Access-Control-Request-Headers: content-type(如果是跨域非简单请求，浏览器会自动添加这个属性)</li>
        <li>cookie</li>
        <li>connection:keep-alive</li>
        <li>content-Length(请求类容的长度)</li>
        <li>host和Referer(分别表示url中的主机、端口号和一个完整url)</li>
        <li>User-Agent(浏览器信息)</li>
        <li>Pragma:http1.0就有的特性</li>
        <li>Cache-control:http1.1新加的特性(这个属性是来设置要不要去读缓存)</li>
        <li>If-Modified-Since:记录文件最新的修改时间</li>
        <li>If-none-match:请求数据在服务器的唯一标识</li>
    </ul>
</article>
<article>
    <h2>响应头参数</h2>
    <ul>
        <li>content-Type:text/plain;charset=UTF-8(发送给服务器的数据类型(MIME))</li>
        <li>content-Encoding(指定解码方式，从客户端指定的方式选择)</li>
        <li>Access-Control-Allow-Origin:*服务器允许跨域请求，*代表允许所有域请求)</li>
        <li>Access-Control-Allow-Methods: 'PUT, GET, POST, DELETE, OPTIONS'(服务器允许的请求方式)</li>
        <li>Access-Control-Expose-Headers:'FooBar'(服务器允许客户端，可以获取额外的响应头信息)</li>
        <li>content-Length:6456(这个需要请求头connection:keep-alive)</li>
        <li>Expires:缓存的过期时间</li>
        <li>Date(日期)</li>
        <li>etag:请求数据在服务器的唯一标识</li>
        <li>Last-Modified:返回文件最新的修改时间</li>
    </ul>
</article>
<article>
    <h2>缓存涉及的几个属性</h2>
    <ul>
        <li>http1.0:Expires(缓存过期时间，绝对时间)、Pragma(是否缓存) (这两个属性在请求头)</li>
        <li>http1.1:Cache-Control(是否缓存，和过期时间，相对时间) (这个属性在响应头或请求头)</li>
        <li>http1.1:If-None-Match和If-Modified-Since(当缓存时间过期时，服务器返回新的数据，还是从缓存里取) (这两个属性在请求头)</li>
        <li>http1.1:ETag、Last-Modified(当缓存时间过期时，服务器返回新的数据，还是从缓存里取) (这两个属性在响应头)</li>
        <li>缓存分为：强缓存和协商缓存，强缓存 > 协商缓存（感觉不存在这种说法，协商缓存也需要设置cache-control属性）</li>
        <li>强缓存属性：Expires和Cache-Control， Cache-Control > Expires</li>
        <li>协商缓存属性：If-Modified-Since，Last-Modified，ETag，If-None-Match, ETag > If-Modified-Since</li>
        <li>Cache-Control: no-cache 和 max-age = 0是一样的</li>
        <li><a href="https://www.cnblogs.com/softidea/p/5986339.html">相关链接</a></li>
        <li><a href="https://www.cnblogs.com/zhouwenhong/p/3928645.html">相关链接</a></li>
    </ul>
</article>
<article>
    <h2>http返回类型</h2>
    <ul>
        <li>200: 请求被正常处理</li>
        <li>201: 服务器已经创建一个或多个资源</li>
        <li>202: 服务器已经接收请求，但未处理</li>
        <li>204: 服务器已经处理请求，但没有结果</li>
        <li>206: 客户端进行了范围请求，服务器已经处理这一部分请求</li>
        <li>301: 永久重定向，通常用于域名切换、HTTP迁移到HTTPS，如 http://www.baidu.com 到 https://www.baidu.com</li>
        <li>302: 临时重定向，未登录用户访问个人中心时重定向到登录页面、404页面提示后跳转到首页</li>
        <li>304: 资源没有被改过</li>
        <li>400: 请求参数格式有问题</li>
        <li>401: 缺失或错误的认证</li>
        <li>403: 已经被认证，但用户没有被授权在特定资源上执行操作</li>
        <li>404: 路径不存在</li>
        <li>405: Method Not Allowed(请求方法写错了，或是参数写错了)</li>
        <li>500: 服务器内部错误</li>
        <li>502: 错误网关</li>
        <li>503: 服务器停止了或重启</li>
        <li>504: 服务器超时</li>
    </ul>

</article>
<article>
    <h4>长连接、短链接、长轮询、短轮询</h4>
    <ul>
        <li>建立连接-》数据传输-》关闭连接</li>
        <li>建立连接-》数据传输-》保持连接-》数据传输-》关闭连接</li>
        <li>http1.0采用短链接</li>
        <li>http1.1采用长链接</li>
        <li>长连接相对于短链接而言，少了频繁的三次握手操作</li>
        <li>短轮询：一定循环周期内，客户端发起请求-》服务端一定即时响应请求-》客户端发起请求-》服务端一定即时响应请求</li>
        <li>长轮询：一定循环周期内，客户端发起请求-》（数据没变化，可以不响应，但保持连接挂起）服务端不一定即时响应请求-》客户端发起请求-》（数据没变化，可以不响应，但保持连接挂起）服务端不一定即时响应请求</li>
        <li>Request Header(请求头参数):Connection: keep-alive</li>
        <li>Request Header(请求头参数):Keep-Alive: timeout=5,max=100(过期时间5s，超过100次请求断开)</li>
    </ul>
</article>
<article>
    <h2 class="my-hidden">http请求问题和相关链接</h2>
    <dl>
        <dt>http请求问题和相关链接</dt>
        <dd>浏览器每次发起请求，都会同时请求一次favicon.ico 浏览器默认会请求这个地址来获取图标；这个图标是地址栏中网站的小图标（或用户放入收藏夹时会显示）</dd>
        <dd>http请求referer和origin区别</dd>
        <dd><a href="http://www.iteye.com/topic/1123380">http都要请求favicon.ico</a></dd>
        <dd><a href="http://www.iteye.com/topic/1123380">referer和origin</a></dd>
    </dl>
</article>
<article>
    <h2 class="my-hidden">计算机网络有七层和四层</h2>
    <dl>
        <dt>TCP/IP四层和OSI七层</dt>
        <dd>物理链路层/物理层、数据链路层</dd>
        <dd>网络层/网络层</dd>
        <dd>传输层/传输层（TCP、UDP）</dd>
        <dd>应用层/会话层、表示层、应用层（HTTP、FTP、telnet, dns, fip、smtp）</dd>
    </dl>
</article>
<article>
    <h2 class="my-hidden">http和https</h2>
    <dl>
        <dt>http和https</dt>
        <dd>http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443</dd>
        <dd>http的连接很简单,是无状态的</dd>
        <dd>HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全</dd>
    </dl>
</article>
<article>
    <h2 class="my-hidden">可以申请免费的SSL证书机构</h2>
    <dl>
        <dt>可以申请免费的SSL证书机构</dt>
        <dd><a href="http://www.enet.com.cn/article/2016/1025/A20161025021560.html">证书机构</a></dd>
        <dd><a href="https://www.aliyun.com/">阿里云</a> 也可以申请免费证书，因为它聚集了有资质的第三方机构</dd>
    </dl>
</article>
<article>
    <h2 class="my-hidden">https服务器的搭建</h2>
    <dl>
        <dt>https服务器的搭建</dt>
        <dd>1申请域名，SSL证书需要域名</dd>
        <dd>2申请SSL证书,创建https服务器需要SSL证书</dd>
        <dd>3创建https服务器</dd>
        <dd>就这简单3步，但具体操作还是个问题；好在阿里云有从申请域名到https服务器使用SSL证书的详细流程</dd>
    </dl>
</article>
<article>
    <pre>
        response header
        Access-Control-Allow-Credentials: true
        Access-Control-Allow-Headers: x-auth-token
        Access-Control-Allow-Methods: GET
        Access-Control-Allow-Origin: http://emall.abcdexyz1-icrcment.com.cn:9988

        request header
        Access-Control-Request-Headers: x-auth-token
        Access-Control-Request-Method: POST
    </pre>
</article>
<article>
    <ul>
        <li>referer 和 origin 和 host</li>
        <li>connection: keep-alive</li>
        <li>Proxy-Connection:keep-alive</li>
        <li>Accept:*/*</li>
    </ul>
</article>
<article>
    <ul>
        <li>Origin: https://sitweb.dashuini.com</li>
        <li>Referer: https://sitweb.dashuini.com/platform/index.html</li>
        <li>Origin: http://platform.abcdexyz1-icrcment.com.cn:9528</li>
        <li>Referer: http://platform.abcdexyz1-icrcment.com.cn:9528/</li>
    </ul>
</article>
<article>
    <ul>
        <li>https://www.cnblogs.com/heluan/p/8620312.html</li>
    </ul>
</article>
<article>
    <ul>
        <li>DNS(Domain Name Server)域名服务器</li>
        <li>IP(Internet Protocol Address)IP地址</li>
        <li>TCP(Transmission Control Protocol) 传输控制协议（面向连接，可靠连接，三次握手）</li>
        <li>DUP(User Data Protocol)用户数据报协议 （面向无连接，不可靠协议，无状态传输机制）</li>
        <li>TCP/IP 点对点连接机制</li>
        <li>HTTP(HyperText Transfer Protocol)超文本传输协议</li>
        <li>HTTPS(HyperText Transfer Protocol Secure)超文本传输安全协议</li>
        <li>HTTPS -> SSL(Secure Sockets Layer)安全套接层</li>
        <li>HTTPS -> TLS(Transport Layer Security)传输层安全</li>
    </ul>
</article>
<p>
    1byte 16bit 源端口号
    1byte 16bit 目的端口号
    1byte 32bit 序号 seq
    1byte 32bit 确认序号 ack
          1bit  确认标识位 ACK
          1bit  发起新的连接 SYN
          1bit  结束连接 FIN
          1bit  URG
          1bit  PSH
          1bit  RST
</p>
</body>
</html>
